Modern computer systems use a wide array of resources, implemented in both hardware and software, such as printers, files, software components, and the like. Each type of resource generally has its own interface for programmatic enumeration, as well as its own interface for general programmatic access. For example, enumerating the devices capable of producing audio output often requires using different interfaces depending on how the audio output devices are connected to the computer system. Furthermore, accessing the same type of resource on another computer system connected via a network often requires the use of yet other interfaces for programmatic enumeration and access. This is troublesome for a wide variety of applications, including those that want to provide a unified view of and access to disparate types of resources, independent of resource type or manner of connection.